package ventas;
/**
 * esta clase representa los test de las ventas
 * con envio a pagar;
 */



import static org.mockito.Mockito.when;

import org.junit.Before;
import org.junit.Test;

import ventas.VentaConEnvioAPagar;
import estadosDelEnvio.Cancelado;
import estadosDelEnvio.EnProcesoDeEnvio;
import estadosDelEnvio.Entregado;
import estadosDelEnvio.PendienteDeEnvio;
import exceptions.VentasException;

/**
 * @author Lucas Alan Silvestri
 *
 */
public class VentaConEnvioAPagarTest extends VentaConEnvioTest {

	
	@Before
	public void setUp() throws Exception {
		super.setUp();
		this.setSut(new VentaConEnvioAPagar(
				this.getListaDeComprasDelCliente(),
				this.getSucursalDeLACompra(),
				this.getClienteQueRealizaLaCompra(), 100F));
		VentaConEnvioAPagar venta= (VentaConEnvioAPagar) this.getSut();
			venta.getEnvioAProcesar().cambiarEstado(new EnProcesoDeEnvio());
	}
	
	/**
	 * Este test demuestra la capacidad de no poder realizar una compra
	 * con envio por que todavia no comenzo a enviase.
	 */
	@Test(expected = VentasException.class)
	public void noSepudoRealizarCompraPorEstarPendienteDeEnvio() throws VentasException{
		VentaConEnvioAPagar venta= (VentaConEnvioAPagar) this.getSut();
		venta.getEnvioAProcesar().cambiarEstado(new PendienteDeEnvio());
		this.getSut().realizarCompra();
	}
	
	/**
	 * Este test demuestra la capacidad de no poder realizar una compra
	 * con envio por que esta se cancelo.
	 */
	@Test(expected = VentasException.class)
	public void noSepudoRealizarCompraPorCancelarse() throws VentasException{
		VentaConEnvioAPagar venta= (VentaConEnvioAPagar) this.getSut();
		venta.getEnvioAProcesar().cambiarEstado(new Cancelado());
		this.getSut().realizarCompra();
	}
	
	/**
	 * Este test demuestra la capacidad de no poder realizar una compra
	 * con envio por que ya fue entregada.
	 */
	@Test(expected = VentasException.class)
	public void noSepudoRealizarCompraPorYaEstarEntregada() throws VentasException{
		VentaConEnvioAPagar venta= (VentaConEnvioAPagar) this.getSut();
		venta.getEnvioAProcesar().cambiarEstado(new Entregado());
		this.getSut().realizarCompra();
		
		
	}
	
	/**
	 * este test demuetra que los productos no fueron comprasdos.
	 */
	@Test(expected = VentasException.class)
	public void noSeRealizoConExitoTest() throws VentasException{
		when(this.getProductoY().precioActual()).thenReturn(150F);
		this.getSut().realizarCompra();
	}
	
}
